package com.example.newinfinity.IconModel

import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
import android.widget.LinearLayout

//主界面中左侧 右侧 上方的icon集合。
//LinearLayout
class IconMenu(context: Context, attrs: AttributeSet? = null) : LinearLayout(context, attrs) {
    private var mIconModels: List<IconModel> = emptyList()

    //记录Icon集合当前的选中icon
    var currentClickIcon: IconTextView? = null

    //一点击icon 就将icon绘画类型以及选中状态callback给HomeFragment
    var iconClickTypeCallback: (IconModelType, IconState) -> Unit = { _, _ -> }

    //提供给homeFragment的方法 用于传入icon模型的集合
    fun bindIconModels(iconModels: List<IconModel>) {
        mIconModels = iconModels
        weightSum = mIconModels.size.toFloat()
        iconModels.forEach { iconModel ->
            //集合中有几个数据模型 就创建几个CircleIconTextView图标
            val mCircleIconTextView = CircleIconTextView(context)
            mCircleIconTextView.bindIconModel(iconModel)  //配置icon的显示信息
            val lp = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
            lp.gravity = Gravity.CENTER
            lp.weight = 1f
            if (orientation == HORIZONTAL) {
                lp.leftMargin = 15
            } else {
                lp.bottomMargin = 10
            }
            addView(mCircleIconTextView, lp)

            //点击了iconTextView后
            mCircleIconTextView.clickCallback = { iconTextView ->
                //所有icon的点击状态切换逻辑
                changeIconsState(iconTextView)
            }
        }
    }

    private fun changeIconsState(iconTextView: IconTextView) {
        if (currentClickIcon == null) {      //当前无选中icon
            currentClickIcon = iconTextView  //记录当前的选中icon
            //更新icon的点击状态
            iconTextView.setIconsState(iconTextView.mIconModel!!.iconState)
            //给HomeFragment的回调 允许其监听此时点击icon的类型以及选中状态
            iconClickTypeCallback(
                iconTextView.mIconModel!!.iconModelType,
                iconTextView.mIconModel!!.iconState
            )
        } else {   //已有选中icon
            if (currentClickIcon != iconTextView) {  //判断是否为当前点击的icon
                //之前选择的icon点击状态更新为normal
                currentClickIcon!!.setIconsState(currentClickIcon!!.mIconModel!!.iconState)
                //正在点击的icon点击状态更新为selected
                iconTextView.setIconsState(iconTextView.mIconModel!!.iconState)
                //记录最新点击的icon
                currentClickIcon = iconTextView
                //给HomeFragment的回调 允许其监听此时点击icon的类型以及选中状态
                iconClickTypeCallback(
                    iconTextView.mIconModel!!.iconModelType,
                    iconTextView.mIconModel!!.iconState
                )
            } else {  //重复点击同一icon 取消其选中状态 当前无选中icon
                iconTextView.setIconsState(iconTextView.mIconModel!!.iconState)
                currentClickIcon = null
                //给HomeFragment的回调 允许其监听此时点击icon的类型以及选中状态
                iconClickTypeCallback(
                    iconTextView.mIconModel!!.iconModelType,
                    iconTextView.mIconModel!!.iconState
                )
            }
        }
    }

    //点击undo clear 功能的图标时，选中状态的颜色变化只需持续200ms左右即可，同时200ms后也需重置该icon的选中状态
    fun resetSelectedState() {
        if (currentClickIcon != null) {
            currentClickIcon!!.setIconsState(currentClickIcon!!.mIconModel!!.iconState)
            currentClickIcon = null
        }
    }

    //点击menu等进行缩放动画时
    //需要hide并且将icon的显示取消 同时若右侧的调色盘以及画笔设置弹窗已弹出 也需要hide
    fun hidePopupWindowAndIconSelectedState(){
        if (currentClickIcon != null){
            currentClickIcon?.onlySetSelectedState(currentClickIcon!!.mIconModel!!.iconState)
            currentClickIcon = null  //当前没有选中的图形
        }
    }

}